package cn.edu.wynu.d14_integer;
/*
包装类：包装类就是把基本类型的数据包装成对象。
基本数据类型  对应的包装类(引用数据类型)
byte                Byte
short               Short
int                 Integer
long                Long
char                Character
float               Float
double              Double
boolean             Boolean

基本类型的数据包装成对象的方案
public Integer(int value):已过时
public static integer valueOf(int i)

自动装箱:基本数据类型可以自动转换为包装类型。
自动拆箱:包装类型可以自动转换为基本数据类型。
*/

/*
包装类的其他常见操作：
1、可以把基本类型的数据转换成字符串类型。
public static String toString(double d)
public String toString()
2、可以把字符串类型的数值转换成数值本身对应的数据类型。
public static int parselnt(String s)
public static Integer valueOf(String s)
*/

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        // 掌握包装类的使用
        // Integer a1 = new Integer(10); // 已过时
        Integer a2 = Integer.valueOf(10); // 推荐使用
        System.out.println(a2);

        // 自动装箱机制：可以自动把基本类型的数据转换成对象
        Integer a3 = 10; // 自动装箱
        System.out.println(a3);

        // 自动拆箱机制：可以自动把包装类型的对象转换成对应的基本类型的数据
        int a4 = a3; // 自动拆箱
        System.out.println(a4);

        // 泛型和集合不支持基本数据类型，只能支持引用数据类型
        // ArrayList<int> list = new ArrayList<>(); // 错误写法
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10); // 自动装箱
        list.add(20); // 自动装箱
        System.out.println(list);

        int rs = list.get(1); // 自动拆箱
        System.out.println(rs);

        System.out.println("--------------------------");

        // 1、把基本数据类型转换成字符串类型
        Integer a = 23;
        String rs1 = Integer.toString(a); // "23"
        System.out.println(rs1 + 1); // 231

        String rs2 = a.toString(); // "23"
        System.out.println(rs2 + 1); // 231

        String rs3 = a + ""; // "23"
        System.out.println(rs3 + 1); // 231

        // 2、把字符串类型的数值转换成数值本身对应的基本数据类型
        String ageStr = "30";
        // int rs4 = Integer.parseInt(ageStr);
        int rs4 = Integer.valueOf(ageStr); // 如果ageStr = "abc"; // 错误写法，必须是对应的数值格式的字符串
        System.out.println(rs4 + 1); // 31

        String scoreStr = "99.5";
        // String scoreStr = "99.5qwe"; // 错误写法，必须是数值格式的字符串
        // double rs5 = Double.parseDouble(scoreStr);
        double rs5 = Double.valueOf(scoreStr);
        System.out.println(rs5 + 0.5); // 100

        Integer rs6 = Integer.valueOf(ageStr);
        System.out.println(rs5);
    }
}
